Skip to content

BUG: Fix empty Group nodes lacking a "consolidated_metadata" field#3967

Merged
TomAugspurger merged 3 commits into
zarr-developers:mainfrom
TomAugspurger:tom/consolidated-metadata-leaf-node-fix
May 12, 2026
Merged

BUG: Fix empty Group nodes lacking a "consolidated_metadata" field#3967
TomAugspurger merged 3 commits into
zarr-developers:mainfrom
TomAugspurger:tom/consolidated-metadata-leaf-node-fix

Conversation

@TomAugspurger

@TomAugspurger TomAugspurger commented May 12, 2026

Copy link
Copy Markdown
Contributor

All nodes opened via open_consolidated are expected to have a non-null .metadata.consolidated_metadata. #3954 showed an example, with a data file written by zarr-python 2.x, where that condition failed to hold.

This happened because of a slight difference between how zarr-python 3.x writes consolidated metadata and how zarr-python 2.x wrote it. For leaf Group nodes (a Group with no Group or Array children), zarr-python 3.x includes an "empty" consolidated_metadata field. In zarr-python 3.x, we include a consolidated_metadata: metadata: {} field to indicate that it's empty. zarr-python 2.x didn't include that.

The fix is to update how we load this type of data. We effectively normalize a node missing consolidated metadata to one that is known not to have consolidated metadata (which is consistent with the idea behind consolidated metadata: just do one metadata read up front).

Closes #3954

TODO:

  • Add unit tests and/or doctests in docstrings
  • Add docstrings and API docs for any new/modified user-facing classes and functions
  • New/modified features documented in docs/user-guide/*.md
  • Changes documented as a new file in changes/
  • GitHub Actions have all passed
  • Test coverage is 100% (Codecov passes)

All nodes opened via `open_consolidated` are expected to have a non-null `.metadata.consolidated_metadata`. zarr-developers#3954 showed an example, with a data file written by zarr-python 2.x, where that condition failed to hold.

This happened because of a slight difference between how zarr-python 3.x writes consolidated metadata and how zarr-python 2.x wrote it. For leaf `Group` nodes (a `Group` with no `Group` or `Array` children), zarr-python 3.x includes an "empty" `consolidated_metadata` field.  In zarr-python 3.x, we include a `consolidated_metadata: metadata: {}` field to indicate that it's empty. zarr-python 2.x *didn't* include that.

The fix is to update how we load this type of data. We effectively normalize a node missing consolidated metadata to one that is known not to have consolidated metadata (which is consistent with the idea behind consolidated metadata: just do one metadata read up front).
@github-actions github-actions Bot added the needs release notes Automatically applied to PRs which haven't added release notes label May 12, 2026
Comment thread src/zarr/core/group.py
Comment on lines +277 to +278
if isinstance(child, GroupMetadata) and child.consolidated_metadata is None:
child = replace(child, consolidated_metadata=ConsolidatedMetadata(metadata={}))

@TomAugspurger TomAugspurger May 12, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the new bit. The rest is rewriting the dict comprehension to a for loop.

@codecov

codecov Bot commented May 12, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 93.28%. Comparing base (c79425e) to head (6932421).

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #3967   +/-   ##
=======================================
  Coverage   93.27%   93.28%           
=======================================
  Files          87       87           
  Lines       11739    11745    +6     
=======================================
+ Hits        10950    10956    +6     
  Misses        789      789           
Files with missing lines Coverage Δ
src/zarr/core/group.py 94.98% <100.00%> (+0.03%) ⬆️
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@ilan-gold

Copy link
Copy Markdown
Contributor

Thanks!

@github-actions github-actions Bot removed the needs release notes Automatically applied to PRs which haven't added release notes label May 12, 2026
@TomAugspurger
TomAugspurger merged commit 1020ca5 into zarr-developers:main May 12, 2026
30 checks passed
@TomAugspurger
TomAugspurger deleted the tom/consolidated-metadata-leaf-node-fix branch May 12, 2026 14:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Consolidated Metadata Not Passed Down

2 participants